package com.github.jing332.common

import android.media.AudioFormat
import android.media.AudioManager
import android.media.AudioTrack
import androidx.media3.exoplayer.ExoPlaybackException
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import cn.hutool.core.codec.Base64Decoder
import cn.hutool.core.text.CharSequenceUtil.bytes
import com.drake.net.Net
import com.github.jing332.common.audio.AudioUtils
import com.github.jing332.common.audio.exo.ExoAudioDecoder
import kotlinx.coroutines.runBlocking
import okhttp3.Response
import org.junit.Test
import org.junit.runner.RunWith
import java.io.FilterInputStream
import java.io.InputStream
import java.nio.ByteBuffer
import kotlin.random.Random

@RunWith(AndroidJUnit4::class)
class AudioDecoderTest {

    val webmAudio = """
        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
    """.trimIndent()

    class TestInputStream(ins: InputStream) : FilterInputStream(ins) {
        val random = Random(System.currentTimeMillis())
        fun randomThrowErr() {
//            if (random.nextBoolean())
//                throw RuntimeException("test throw error from stream")
        }

        override fun read(): Int {
            randomThrowErr()
            return super.read()
        }

        override fun read(b: ByteArray?, off: Int, len: Int): Int {
            randomThrowErr()
            return super.read(b, off, len)
        }

        override fun available(): Int {
            randomThrowErr()
            return super.available()
        }

    }

    private fun ByteBuffer.toBytes(): ByteArray {
        val bytes = ByteArray(remaining())
        this.get(bytes)
        return bytes
    }

    @Test
    fun testExoDecoder() {
//        val resp: Response = Net.get("https://download.samplelib.com/mp3/sample-3s.mp3").execute()
//        assert(resp.isSuccessful)
//        val bytes = resp.body!!.byteStream()
        val bytes = Base64Decoder.decode(webmAudio)


        val audioPlayer = AudioUtils.createAudioTrack(24000)
        audioPlayer.play()

        val context = InstrumentationRegistry.getInstrumentation().targetContext
        runBlocking {
            val decoder = ExoAudioDecoder(context)
            decoder.callback = object : ExoAudioDecoder.Callback {
                override fun onReadPcmAudio(byteBuffer: ByteBuffer) {
                    println(byteBuffer)

                    val bufferSize =
                        audioPlayer.bufferSizeInFrames * audioPlayer.channelCount * 2 // Assuming 16-bit PCM
                    val tempBuffer = ByteArray(bufferSize)
//                    byteBuffer.rewind() // Ensure ByteBuffer is at the beginning

                    while (byteBuffer.hasRemaining()) {
                        val bytesToRead = minOf(byteBuffer.remaining(), tempBuffer.size)
                        byteBuffer.get(tempBuffer, 0, bytesToRead)
                        audioPlayer.write(tempBuffer, 0, bytesToRead)
                    }
                }
            }

            try {
                decoder.doDecode(bytes)
            } catch (e: ExoPlaybackException) {
                e.printStackTrace()
            }
        }
    }
}